//////////////////////////////////////////////////////////////////////////////
//
//		Utility: Type Checkers
//
//////////////////////////////////////////////////////////////////////////////

#ifndef MAGUS_TYPE_CHECK_HPP
#define MAGUS_TYPE_CHECK_HPP

namespace magus {
	
namespace utility
{
	//// Type checks /////////////////////////////////////////////////////////

	template <typename T>
	struct type_check
	{};

	template <>
	struct type_check<char>
	{
		enum { is_primitive_type = true };
	};

/*	template <>
	struct type_check<unsigned char>
	{
		enum { is_primitive_type = true };
	};   
*/	
	template <>
	struct type_check<bool>
	{
		enum { is_primitive_type = true };
	};  
	
	template <>
	struct type_check<short>
	{
		enum { is_primitive_type = true };
	};
	
	template <>
	struct type_check<unsigned short>
	{
		enum { is_primitive_type = true };
	};

	template <>
	struct type_check<long>
	{
		enum { is_primitive_type = true };
	};

/*	template <>
	struct type_check<unsigned long>
	{
		enum { is_primitive_type = true };
	};
*/

	template <>
	struct type_check<float>
	{
		enum { is_primitive_type = true };
	};
	
	template <>
	struct type_check<double>
	{
		enum { is_primitive_type = true };
	};

}	// namespace utility


} // namespace magus

// Change Log:
//    02 JLY 03  Initial version.

#endif /* MAGUS_TYPE_CHECK_HPP */
